#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class Date
{
public:

	// 全缺省的构造函数
	Date(int year = 1900, int month = 1, int day = 1);


	//打印函数
	void Print();


	// 获取某年某月的天数
	int GetMonthDay(int year, int month);


	// 日期+=天数
	// d1 += 10
	// d1 += -10
	Date& operator+=(int day);


	// 日期+天数
	// d + 10
	Date operator+(int day);



	// 日期-天数
	Date operator-(int day);


	// 日期-=天数
	// d -= 100
	// d -= -100
	Date& operator-=(int day);



	// 前置++
	// ++d -> d.operator++( )
	Date& operator++();

	// 后置++
	// d++ -> d.operator++(int)
	Date operator++(int);

	// 后置--
	Date operator--(int);

	// 前置--
	Date& operator--();



	// d1 > d2
	// >运算符重载
	bool operator>(const Date& d);


	// ==运算符重载
	bool operator==(const Date& d);


	// 下面复用上面两个的实现
	// >=运算符重载
	bool operator >= (const Date& d);


	// <运算符重载
	bool operator < (const Date& d);


	// <=运算符重载
	bool operator <= (const Date& d);


	// !=运算符重载
	bool operator != (const Date& d);


	// d1 - d2
	// 日期-日期 返回天数
	int operator-(const Date& d);

private:

	int _year;
	int _month;
	int _day;
};